<?php
session_start();

/**
 * 封装生成随机字符串的方法
 * @param number $length 获取随机字符串的长度
 * @return string 返回一个随机字符串
 */
function randstr($length = 4)
{
    $str = "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    $rand = str_shuffle($str); //可以随机打乱一个字符串
    return substr($rand, 0, $length);
}




//验证码
$width = 120;
$height = 50;

//创建一个彩色的图片对象(透明的颜色)
$img = imagecreatetruecolor($width, $height);

//创建背景颜色
$bgr = mt_rand(0, 255);
$bgg = mt_rand(0, 255);
$bgb = mt_rand(0, 255);

$bgcolor = imagecolorallocate($img, $bgr, $bgg, $bgb);

//将背景色填充到图片上(以矩形的方式填充)
imagefilledrectangle($img, 0, 0, $width, $height, $bgcolor);

//生成随机数
$imgcode = "";

//循环4次
for($i = 0; $i<4; $i++)
{
    $code = randstr(1); //单个字符
    $imgcode .= $code; //将单个字符 组装到一个字符串中

    // 文字颜色
    $textr = mt_rand(0, 255);
    $textg = mt_rand(0, 255);
    $textb = mt_rand(0, 255);
    $textcolor = imagecolorallocate($img, $textr, $textg, $textb);

    //字体路径 如果相对路径要是没有加载进来 就用绝对路径
    $font = "assets/font/font.ttf";

    $angle = mt_rand(0, 360);
    $x = 21 * ($i + 1);

    //将字符串写到图片上
    imagettftext($img, 25, 0, $x, 35, $textcolor, $font, $code);
}

//将最终的验证码存放到缓存中 cookie session
// setcookie('imgcode', $imgcode); //关闭浏览器之后就没有了
// setcookie('imgcode', $imgcode, time() + 3600);
$_SESSION['vercode'] = $imgcode;

//混淆 
// 打一些像素点
for($i = 0; $i < 200; $i++)
{
    // 文字颜色
    $r = mt_rand(0, 255);
    $g = mt_rand(0, 255);
    $b = mt_rand(0, 255);
    $color = imagecolorallocate($img, $r, $g, $b);

    //位置
    $x = mt_rand(0, $width);
    $y = mt_rand(0, $height);

    // 在图片上面打像素点
    imagesetpixel($img, $x, $y, $color);
}

//加线
for($i=0; $i<10; $i++)
{
    // 文字颜色
    $r = mt_rand(0, 255);
    $g = mt_rand(0, 255);
    $b = mt_rand(0, 255);
    $color = imagecolorallocate($img, $r, $g, $b);

    //位置
    $x1 = mt_rand(0, $width);
    $y1 = mt_rand(0, $height);

    $x2 = mt_rand(0, $width);
    $y2 = mt_rand(0, $height);

    imageline($img, $x1, $y1, $x2, $y2, $color);
}


// 声明编码
// header("Content-Type:text/html;charset=utf-8");

// 声明一个图片的头信息
header("Content-Type:image/png");

//输出一张图片(资源)
imagepng($img);
// imagepng($img, "./1.png"); //保存图片